def exists(board, word):
    # 检查网格是否为空
    if not board or not board[0]:
        return False

    # 获取网格的行数和列数
    rows, cols = len(board), len(board[0])
    
    # 定义深度优先搜索（DFS）函数
    def dfs(r, c, index):
        # 如果索引等于单词的长度，表示单词已找到
        if index == len(word):
            return True
        # 检查当前坐标是否越界或字母没有匹配
        if r < 0 or c < 0 or r >= rows or c >= cols or board[r][c] != word[index]:
            return False
        
        # 记录当前字母并进行标记，标记为 '#' 表示该字母已访问过
        temp = board[r][c]
        board[r][c] = '#'
        
        # 在四个方向上进行深度优先搜索
        found = (
            dfs(r + 1, c, index + 1) or  # 向下搜索
            dfs(r - 1, c, index + 1) or  # 向上搜索
            dfs(r, c + 1, index + 1) or  # 向右搜索
            dfs(r, c - 1, index + 1)      # 向左搜索
        )
        
        # 恢复原来的字母，以便后续搜索使用
        board[r][c] = temp
        return found

    # 遍历网格中的每一个字母作为起点
    for i in range(rows):
        for j in range(cols):
            if dfs(i, j, 0):  # 以 (i,j) 为起点进行 DFS
                return True
    return False  # 如果遍历完所有点仍未找到单词，则返回 False